Theo Marsh

Ledger

2026 · Maintained

Ledger started because I wanted to know where my money went and every app that could tell me also wanted my bank credentials. It is a single binary that reads a plain text file, one transaction per line, and answers questions about it.

2026-07-14  groceries   -42.80  co-op
2026-07-15  salary     3200.00  acme
2026-07-16  coffee       -3.40  the kiosk

The design constraint

Everything had to survive the program being deleted. The file is the database; the binary is a lens over it. That single decision removed migrations, backups, export, account deletion and roughly ninety percent of the surface area a normal finance app carries — and it meant the first working version took a weekend rather than a season.

What I would change

The query language grew organically and it shows. If I started again I would take SQL seriously from the first day instead of inventing four filters and then a fifth, and I would not have made the reporting subcommand print colour by default — a year of bug reports came from that one line.

Role
Design and build
Year
2026
Built with
Go, SQLite
Status
Maintained

Other projects

All five projects